﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using System.ComponentModel;
using Sinacor.Infra.UI.Common;
using Sinacor.UI.Bovespa.Clientes.Model.Enum;

namespace Sinacor.UI.Bovespa.Clientes.Model
{
    [Serializable]
    public class InformacoesCliente : BaseModel
    {
        private string _nome;
        private string _origem;
        private string _apelido;
        private string _assessor;
        private int? _codigo;
        private int _codigoDigito;
        private Int32? _clienteContaInvestimento;
        private long? _cpfcnpj;
        private DateTime _posicaoContaInvestimentoEm;
        private DateTime _posicaoContaCorrenteEm;
        private DateTime _posicaoCustodiaEm;

        //BindLists
        private ObservableCollection<decimal> _limiteOperacionais;

        //SubModels
        private InformacoesClienteBanco _bancoContaCorrente;
        private InformacoesClienteBanco _bancoDividendo;
        
        //ModelCollections
        private ModelCollection<InformacoesClienteEndereco> _enderecos;
        private ModelCollection<InformacoesClienteTelefone> _telefones;

        //Enumerator
        private TipoTransmissaoOrdem _transmissaoOrdem;
  
        #region Construtor
        public InformacoesCliente()
        {
            this.BancoDividendo = new InformacoesClienteBanco();
            this.BancoContaCorrente = new InformacoesClienteBanco();
            this.Enderecos = new ModelCollection <InformacoesClienteEndereco>();
            this.Telefones = new ModelCollection<InformacoesClienteTelefone>();
            this.LimiteOperacionais = new ObservableCollection<decimal>();
            
        }
        #endregion

        #region Propriedades
        public string Apelido
        {
            get { return _apelido; }
            set { _apelido = value; this.OnPropertyChanged("Apelido"); }
        }

        public string Assessor
        {
            get { return _assessor; }
            set { _assessor = value; this.OnPropertyChanged("Assessor"); }
        }

        public InformacoesClienteBanco BancoContaCorrente
        {
            get { return _bancoContaCorrente; }
            set { _bancoContaCorrente = value; this.OnPropertyChanged("BancoContaCorrente"); }
        }

        public InformacoesClienteBanco BancoDividendo
        {
            get { return _bancoDividendo; }
            set { _bancoDividendo = value; this.OnPropertyChanged("BancoDividendo"); }
        }

        public int? Codigo
        {
            get { return _codigo; }
            set { _codigo = value; this.OnPropertyChanged("Codigo"); }
        }

        public int CodigoDigito
        {
            get { return _codigoDigito; }
            set { _codigoDigito = value; this.OnPropertyChanged("CodigoDigito"); }
        }

        //20080421 16:50 - Renomeado de ContaInvestimento para ClienteContaInvestimento
        //e alterada de string para int32? - DMilanez.7Comm
        public Int32? ClienteContaInvestimento
        {
            get { return _clienteContaInvestimento; }
            set { _clienteContaInvestimento = value; this.OnPropertyChanged("ClienteContaInvestimento"); }
        }

        public long? Cpfcnpj
        {
            get { return _cpfcnpj; }
            set { _cpfcnpj = value; this.OnPropertyChanged("Cpfcnpj"); }
        }

        public ModelCollection<InformacoesClienteEndereco> Enderecos
        {
            get { return _enderecos; }
            set { _enderecos = value; this.OnPropertyChanged("Enderecos"); }
        }

        public ObservableCollection<decimal> LimiteOperacionais
        {
            get { return _limiteOperacionais; }
            set { _limiteOperacionais = value; this.OnPropertyChanged("LimiteOperacionais"); }
        }

        public string Nome
        {
            get { return _nome; }
            set { _nome = value; this.OnPropertyChanged("Nome"); }
        }

        public string Origem
        {
            get { return _origem; }
            set { _origem = value; this.OnPropertyChanged("Origem"); }
        }

        public ModelCollection<InformacoesClienteTelefone> Telefones
        {
            get { return _telefones; }
            set { _telefones = value; this.OnPropertyChanged("Telefones"); }
        }

        public TipoTransmissaoOrdem TransmissaoOrdem
        {
            get { return _transmissaoOrdem; }
            set { _transmissaoOrdem = value; this.OnPropertyChanged("TransmissaoOrdem"); }
        }

        public DateTime PosicaoContaInvestimentoEm
        {
            get { return _posicaoContaInvestimentoEm; }
            set { _posicaoContaInvestimentoEm = value; this.OnPropertyChanged("PosicaoContaInvestimentoEm"); }
        }

        public DateTime PosicaoContaCorrenteEm
        {
            get { return _posicaoContaCorrenteEm; }
            set { _posicaoContaCorrenteEm = value; this.OnPropertyChanged("PosicaoContaCorrenteEm"); }
        }

        public DateTime PosicaoCustodiaEm
        {
            get { return _posicaoCustodiaEm; }
            set { _posicaoCustodiaEm = value; this.OnPropertyChanged("PosicaoCustodiaEm"); }
        }

        //20080421 16:49 - Adicionado para atender ao chamado 3063 - DMilanez.7Comm
        private bool _isClienteContaInvestimento;
        public bool IsContaInvestimento
        {
            get { return _isClienteContaInvestimento; }
            set { _isClienteContaInvestimento = value; this.OnPropertyChanged("IsClienteContaInvestimento"); }
        }

        //20080421 16:49 - Adicionado para atender ao chamado 3063 - DMilanez.7Comm
        private Int32? _digitoClienteContaInvestimento;
        public Int32? DigitoClienteContaInvestimento
        {
            get { return _digitoClienteContaInvestimento; }
            set { _digitoClienteContaInvestimento = value; this.OnPropertyChanged("DigitoClienteContaInvestimento"); }
        }

        //20080421 16:49 - Adicionado para atender ao chamado 3063 - DMilanez.7Comm
        private Int32? _clienteContaDeposito;
        public Int32? ClienteContaDeposito
        {
            get { return _clienteContaDeposito; }
            set { _clienteContaDeposito = value; this.OnPropertyChanged("ClienteContaDeposito"); }
        }

        //20080421 16:49 - Adicionado para atender ao chamado 3063 - DMilanez.7Comm
        private Int32? _digitoClienteContaDeposito;
        public Int32? DigitoClienteContaDeposito
        {
            get { return _digitoClienteContaDeposito; }
            set { _digitoClienteContaDeposito = value; this.OnPropertyChanged("DigitoClienteContaDeposito"); }
        }

        //20080423 11:39 - Adicionado para atender ao chamado 3364 - DMilanez.7Comm
        private bool _isBloqueado;
        public bool IsBloqueado
        {
            get { return _isBloqueado; }
            set { _isBloqueado = value; this.OnPropertyChanged("IsBloqueado"); }
        }

        //20080423 11:39 - Adicionado para atender ao chamado 3364 - DMilanez.7Comm
        private string _tipoBloqueio;
        public string TipoBloqueio
        {
            get { return _tipoBloqueio; }
            set { _tipoBloqueio = value; this.OnPropertyChanged("TipoBloqueio"); }
        }

        //20080423 11:39 - Adicionado para atender ao chamado 3364 - DMilanez.7Comm
        private string _descricaoBloqueio;
        public string DescricaoBloqueio
        {
            get { return _descricaoBloqueio; }
            set { _descricaoBloqueio = value; this.OnPropertyChanged("DescricaoBloqueio"); }
        }
        #endregion
    }
}